#ifndef IGSLIB_IVR_MANAGER_H
#define IGSLIB_IVR_MANAGER_H

#include "igslib_common_use.h"
#include "igslib_iserial_manager.h"

namespace igslib
{
    /*!
     * 表示一個可變電阻(Variable Resistence)裝置。
     * 常見裝置像音量控制旋鈕。
     */
	struct IVR:public IComponent
	{
        /*!
         * 取得絕對位置值。
         * @param a0 結果傳回。
         * @return
         *     0: 操作正常。
         *     -1: 超過實作範圍。
         */
        virtual int GetPosition(float*)=0;
        /*!
         * 取得位移值。
         * @param a0 結果傳回。
         * @return
         *     0: 操作正常。
         *     -1: 超過實作範圍。
         */
        virtual int GetOffset(float*)=0;
        /*!
         * 若實作是使用SPI通訊介面，用此函式輸入SPI的實作。
         * @param a0 SPI的實作。
         */
        virtual void SetSPI(ISpi*)=0;
	};

	struct IVRManager:public IManager<IVR*>
	{
		/*!
         * 創建一個可變電阻。
         * @return 可變電阻。
         */
		virtual IVR* NewM01VR()=0;
		
		/*!
         * 創建MH主板上根據專案特規實作MCU UART資源。
         * @param a0 專案名。
         * @return MCU端 IVR 介面
         * @note
         *     目前已實作專案名對照如下：
         *     "DragonBallRace"：龍珠賽球
         */	 
        virtual IVR* New_ProjMCU(const std::string&)=0;	
		
		
	};
}
extern "C"{
    igslib::IVRManager* GetVRManagerInstance();
};

#endif

